/**
 * 路由鉴权
 * (项目中路由能不能被访问的权限的设置，某路由在什么条件下可以访问，什么条件下不能访问)
 */
import router from "./router"

// 引入进度条的插件
import NProgress from "nprogress"
NProgress.configure({ showSpinner: false }) // 禁用右侧的小圆圈loading
import "nprogress/nprogress.css"

// 引入user的pinia模块
import useUserStore from "@/store/modules/user"

// 引入element-plus提示的插件
import { ElNotification } from "element-plus"

// 引入setting文件
import setting from "./setting"

// 全局前置路由守卫
router.beforeEach((to: any, from: any, next: any) => {
    NProgress.start()

    // 获取user的小仓库
    let userStore = useUserStore()
    // 判断登录情况
    if (userStore.token) {
        // 已登录，有token
        if (to.path === "/login") {
            next({ path: "/" })
        } else {
            if (userStore.userName) {
                next()
            } else {
                // 没有用户信息就去获取
                let result = userStore.getUserInfo() // res是promise
                result
                    .then(() => {
                        next()
                    })
                    .catch(() => {
                        // 获取用户信息失败了
                        // 可能token失效了，或者token被改了，或者后台服务挂了

                        // userStore.logout()
                        // next({ path: "/login" })

                        // 也可以提示用户自己退出登录
                        ElNotification({
                            title: "提示",
                            message: "登录失效，请重新登录",
                            type: "warning",
                        })
                        next()
                    })
            }
        }
    } else {
        // 未登录，没token
        if (to.path === "/login") {
            next()
        } else {
            next({ path: "/login" })
        }
    }
})

// 全局后置路由守卫
router.beforeEach((to: any, from: any) => {
    document.title = setting.title + "-" + to.meta.title
    NProgress.done()
})
